﻿using System;

namespace Blog
{
	/// <summary>
	/// Исключение генерируется в случае если значение Version у бизнес объекта отличается от значения в базе данных.
	/// </summary>
	public class ConcurrencyException  : BlogException
	{
		public ConcurrencyException(Exception exception) : base(exception) { }
		public ConcurrencyException(BlogException ucgException) : base(ucgException) { }
	};

	/// <summary>
	/// Исключение генерируется в случае если произошла ошибка по вине аппаратуры
	/// </summary>
	public class ServerNotFoundException : BlogException
	{
		public ServerNotFoundException(Exception exception) : base(exception) { }
		public ServerNotFoundException(BlogException ucgException) : base(ucgException) { }
	};

	/// <summary>
	/// Исключение генерируется в случае если пользователю запрещен вход в систему
	/// </summary>
	public class UserLoginLocked : BlogException
	{
		public UserLoginLocked(Exception exception) : base(exception) { }
		public UserLoginLocked(BlogException ucgException):base(ucgException) {}
	};

	/// <summary>
	/// Ошибка соединения с базой данных на физическом уровне или сервер не найден 
	/// или произошла ошибка по вине аппаратуры
	/// </summary>
	public class GeneralNetworkException : BlogException
	{
		public GeneralNetworkException(Exception exception) : base(exception) { }
		public GeneralNetworkException(BlogException ucgException) : base(ucgException) { }
	};

	/// <summary>
	/// Нет доступа. Не верное имя пользователя или пароль.
	/// </summary>
	public class AccessDeniedException : BlogException
	{
		public AccessDeniedException(Exception exception) : base(exception) { }
		public AccessDeniedException(BlogException ucgException):base(ucgException) {}
	};

	/// <summary>
	/// Не известный статус доступа
	/// </summary>
	public class UnknownPermissionException : BlogException
	{
		public UnknownPermissionException(Exception exception) : base(exception) { }
		public UnknownPermissionException(BlogException ucgException):base(ucgException) {}
	};

	/// <summary>
	/// Истекло время ожидания
	/// </summary>
	public class TimeOutException : BlogException
	{
		public TimeOutException(Exception exception) : base(exception) { }
		public TimeOutException(BlogException ucgException) : base(ucgException) { }
	};

	/// <summary>
	/// Ошибка работы с памятью
	/// </summary>
	public class OutOfMemoryException : BlogException
	{
		public OutOfMemoryException(Exception exception) : base(exception) { }
		public OutOfMemoryException(BlogException ucgException) : base(ucgException) { }
	};

	/// <summary>
	/// deadlock handler
	/// </summary>
	public class DeadLockException : BlogException
	{
		public DeadLockException(Exception exception) : base(exception) { }
		public DeadLockException(BlogException ucgException) : base(ucgException) { }
	};

}
